package com.todo.ln.controller;

import com.todo.ln.entity.Admin;
import com.todo.ln.entity.Page;
import com.todo.ln.service.AdminService;
import com.todo.ln.utils.RestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 1.@description:
 * 2.@author:ln
 * 3.@Date:2022/9/15
 */
@RestController
@RequestMapping("/admin")  // 为每个模块添加一个前缀路径，保证各个模块路径的唯一性
public class AdminController {
    @Autowired
    private AdminService adminService;
    //    @RequestMapping("/adminList")
//    public RestUtils adminList() {
//        return adminService.adminList();
//    }
//    @RequestMapping("/adminListByLikeUsername")
//    public RestUtils adminListByLikeUsername(Admin admin){
//        return adminService.adminListByLikeUsername(admin.getUsername());
//    }
    // 统一请求路径处理
    @RequestMapping("/{url}")
    // @PathVariable 路径变量注解，可以获取到请求的路径变量，它会统一去除掉添加的前缀路径，比如:/admin前缀
    public RestUtils adminRequest(@PathVariable String url, Admin admin, Page page){
        // 提高代码的复用性，使用switch或者if-else结构，使得代码的可读性增强
        switch (url){
            // 用户列表
            case "adminList":
                return adminService.adminList();
            // 模糊查询用户
            case "adminListByLikeUsername":
                return adminService.adminListByLikeUsername(admin.getUsername());
            // 分页查询用户
            case "adminListByPage":
                return adminService.adminListByPage(page.getCurrent(),page.getRows());
            // 添加用户
            case "addAdmin":
                return adminService.addAdmin(admin);
            // 修改用户
            case "updateAdmin":
                return adminService.updateAdmin(admin);
            // 逻辑删除用户
            case "delAdmin":
                return adminService.delAdmin(admin);
            case "deleteAdmin":
                return adminService.deleteAdmin(admin.getAdminId());
        }
        return  null;// 保证代码没有编译错误，并没有实际意义

    }
}

